import { createRouter, createWebHistory } from 'vue-router'

import { useUserStore } from '../stores/modules/user'
import { getDeviceType, getTargetPort } from '@/utils/deviceDetector'
// 将动态导入改为静态导入


//定义路由关系

// console.log(import.meta.env.DEV);     //  true
// console.log(import.meta.env.BASE_URL);//  /

//电脑端创建路由器
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    // 登录页
    {
      path: '/login',
      component: () => import('@/views/login/LoginPage.vue'), // 登录页
      meta: { title: '登录页' }, // 设置页面中文名
    },
    // 首页
    {
      path: '/',
      name: 'Home',
      component: () => import('@/views/Home.vue'),
      meta: { title: '毕业生之家(✿◠‿◠)~-GradLink' } // 添加 meta 标签设置标题
    },
    {
      path: '/copy',
      name: 'Home1',
      component: () => import('@/views/Home copy.vue'),
      meta: { title: '副本' } // 添加 meta 标签设置标题
    },
    // 管理员控制台路由组（整合版）
    {
      path: '/adminConsole',
      name: 'AdminConsole',
      component: () => import('@/views/admin/AdminLayout.vue'), // 新建统一的布局组件
      meta: {
        title: '管理控制台',
        roles: ['admin', 'teacher'] // 仅管理员可访问
      },
      redirect: '/adminConsole/students', // 默认重定向
      children: [
        // 毕业生信息管理
        {
          path: 'students',
          name: 'StudentManagement',
          component: () => import('@/views/admin/StudentList.vue'),
          meta: {
            title: '毕业生管理',
            icon: 'icon-user' // 用于侧边栏图标
          }
        },
        // 就业数据分析地图
        {
          path: 'employmentMap',
          name: 'EmploymentMap',
          component: () => import('@/views/admin/EmploymentMap.vue'),
          meta: {
            title: '就业分布',
            icon: 'icon-map'
          }
        },
        // 深造数据统计
        {
          path: 'educationStats',
          name: 'EducationStats',
          component: () => import('@/views/admin/EducationChart.vue'),
          meta: {
            title: '深造统计',
            icon: 'icon-chart'
          }
        }
      ]
    },
    // 搜索相关路由
    {
      path: '/searchList',
      name: 'SearchList',
      component: () => import('@/views/SearchResults.vue'),
      meta: { title: '搜索结果' } // 添加 meta 标签设置标题
    },

    // 个人中心路由组
    {
      path: '/user-center',
      name: 'UserCenter',
      component: () => import('@/views/user/Layout.vue'),
      meta: { title: '个人中心' }, // 添加 meta 标签设置标题
      redirect: '/user-center/profile', // 默认重定向到 profile 页面
      children: [
        {
          path: 'profile',
          name: 'UserProfile',
          component: () => import('@/views/user/Profile.vue'),
          meta: { title: '个人资料' } // 添加 meta 标签设置标题
        },
        {
          path: 'settings',
          name: 'UserSettings',
          component: () => import('@/views/user/Settings.vue'),
          meta: { title: '账号设置' } // 添加 meta 标签设置标题
        },
      ]
    },
    // 个人主页
    {
      path: '/my-space/:id',
      name: 'UserSpace',
      component: () => import('@/views/user/UserSpace.vue'),
      meta: { title: '个人主页' } // 添加 meta 标签设置标题
    },
    // 动态
    {
      path: '/moments',
      name: 'Moments',
      component: () => import('@/views/Moments.vue'),
      meta: { title: '动态' } // 添加 meta 标签设置标题
    },
    // 评论
    {
      path: '/comments'
      , name: 'Comments'
      , component: () => import('@/components/BiliComments.vue')
      , meta: { title: '评论' }
    },

    // 活动管理路由组
    {
      path: '/activity-manage',
      name: 'ActivityManage',
      component: () => import('@/views/activity/Layout.vue'),
      meta: { title: '创作中心' }, // 添加 meta 标签设置标题
      redirect: '/activity-manage/content', // 默认重定向到 content 页面
      children: [
        {
          path: 'content',
          name: 'ActivityContent',//活动内容管理
          component: () => import('@/views/activity/ContentManage.vue'),
          meta: { title: '内容管理' } // 添加 meta 标签设置标题
        },
        {
          path: 'my-registrations',
          name: 'ActivityRegistrations',
          component: () => import('@/views/activity/MyRegistrations.vue'),
          meta: { title: '我的报名' } // 添加 meta 标签设置标题
        }
      ]
    },
    // {
    //   path: '/publish-activity',
    //   name: 'PublishActivityStatic',
    //   component: () => import('@/views/publish/PublishActivityStatic.vue'), 
    //   meta: { title: '发布活动' } // 添加 meta 标签设置标题
    // },
    //发布校友活动
    {
      path: '/publish-activity',
      name: 'PublishActivityCopy',
      component: () => import('@/views/publish/PublishActivity.vue'),
      meta: { title: '发布活动' } // 添加 meta 标签设置标题
    },
    //发布职业资源
    {
      path: '/publish-article',
      name: 'PublishArticle',
      component: () => import('@/views/publish/PublishCareerResourceArticle.vue'),
      meta: { title: '发布文章' } // 添加 meta 标签设置标题
    },

    // 消息中心路由组
    {
      path: '/message-center',
      name: 'MessageCenter',
      component: () => import('@/views/message/Layout.vue'),
      redirect: '/message-center/replies', // 默认重定向到 replies 页面
      meta: { title: '消息中心' }, // 添加 meta 标签设置标题
      children: [
        {
          path: 'replies',
          name: 'MessageReplies',
          component: () => import('@/views/message/Replies.vue'),
          meta: { title: '回复我的' } // 添加 meta 标签设置标题
        },
        {
          path: 'likes',
          name: 'MessageLikes',
          component: () => import('@/views/message/Likes.vue'),
          meta: { title: '收到的赞' } // 添加 meta 标签设置标题
        }
      ]
    },



    //查看文章详情
    {
      path: '/alumni-event/:eventId',  // 校友活动文章
      name: 'AlumniEventDetail',
      component: () => import('@/views/articles/AlumniEventDetail.vue'),
      props: true,
      meta: {
        title: '校友活动详情',
        articleType: 'AlumniEvent'  // 显式标识类型
      }
    },
    {
      path: '/career-resource/:resourceId',  // 职业资源文章
      name: 'CareerResourceDetail',
      component: () => import('@/views/articles/CareerResourceDetail.vue'),
      props: true,
      meta: {
        title: '职业资源详情',
        articleType: 'CareerResource'
      }
    },
    {
      path: '/event-review/:eventId',  // 活动回顾
      name: 'EventReviewDetail',
      component: () => import('@/views/articles/EventReviewDetail.vue'),
    },
    {
      path: '/403',
      name: 'Forbidden',
      component: () => import('../views/error/403.vue'),
      meta: { title: '无权限访问' }
    }



  ]
})

// 登录访问拦截 => 默认是直接放行的
// 根据返回值决定，是放行还是拦截
// 返回值：
// 1. undefined / true 直接放行
// 2. false 拦回 from 的地址页面
// 3. 具体路径或路径对象拦截到对应的地址



// 类型提示（可选）
const whiteList = ['/login', '/403'] // 白名单路径

import { convertPath } from '../../../routeMap'

// 路由前置守卫
router.beforeEach(async (to) => {  // 定义全局路由守卫，在每次路由跳转前执行
  const currentPort = window.location.port  // 获取当前窗口的端口号
  const targetPort = getTargetPort()  // 调用getTargetPort函数获取目标端口
  const deviceType = getDeviceType()  // 调用getDeviceType函数获取设备类型

  /*   if (currentPort !== targetPort) {  // 注释掉的旧逻辑：端口不匹配时
    // 保留协议、主机名和路径，仅替换端口
    const newUrl = `${window.location.protocol}//${window.location.hostname}:${targetPort}${to.path}`  // 构造新URL
    window.location.replace(newUrl)  // 替换当前URL
    return  // 终止后续执行
  } */




  if (currentPort !== targetPort) {  // 新逻辑：如果当前端口与目标端口不一致
    const convertedPath = convertPath(to.path, deviceType)  // 根据设备类型转换路径
    const newUrl = `${window.location.protocol}//${window.location.hostname}:${targetPort}${convertedPath}`  // 构造包含转换后路径的新URL
    window.location.replace(newUrl)  // 替换当前URL
    return  // 终止后续执行
  }


  // 权限检查
  const userStore = useUserStore()
  const hasToken = userStore.token

  // 1. 白名单直接放行
  if (whiteList.includes(to.path)) return true

  // 2. 无token情况处理
  if (!hasToken) {
    return `/login?redirect=${encodeURIComponent(to.fullPath)}`
  }

  // 3. 有token时需要检查用户信息
  if (!userStore.user?.userId) {
    try {
      await userStore.getUser() // 获取用户信息
    } catch (e) {
      userStore.clearUser()
      return '/login'
    }
  }

  // 4. 角色权限检查（核心逻辑）
  const userRole = userStore.user?.userRole?.code
  // console.log('userRole', userRole);
  const requiredRoles = to.meta.roles // 从路由meta获取所需角色
  //1是管理员,2是学生,3是老师
  //如果进入的页面需要角色权限，且当前用户没有权限，则返回403页面
  if (requiredRoles) {
    // 就业数据分析页需要admin或teacher角色
    if (requiredRoles.includes('admin') || requiredRoles.includes('teacher')) {
      if (userRole !== 1 && userRole !== 3) { // 既不是admin也不是teacher
        return '/403' // 无权限页面
      }
    }
  }


  return true
})
// 后置路由守卫
router.afterEach((to) => {
  // 获取 meta 中的 title
  const title = to.meta.title
  if (title) {
    // 设置页面标签
    document.title = title
  } else {
    // 如果没有设置 title，使用默认标题
    document.title = '毕业生之家(✿◠‿◠)~-GradLink'
  }
})
//导出路由
export default router
